home *** CD-ROM | disk | FTP | other *** search
/ Giga Games 1 / Giga Games.iso / net / usenet / volume7 / nethack3 / patch8k < prev    next >
Encoding:
Internet Message Format  |  1990-06-08  |  52.6 KB

  1. Path: uunet!zephyr.ens.tek.com!tekred!saab!billr
  2. From: billr@saab.CNA.TEK.COM (Bill Randle)
  3. Newsgroups: comp.sources.games
  4. Subject: v10i029:  NetHack3 -  display oriented dungeons & dragons (Ver. 3.0), Patch8k
  5. Message-ID: <5737@tekred.CNA.TEK.COM>
  6. Date: 5 Jun 90 17:57:02 GMT
  7. Sender: news@tekred.CNA.TEK.COM
  8. Lines: 1650
  9. Approved: billr@saab.CNA.TEK.COM
  10.  
  11. Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu>
  12. Posting-number: Volume 10, Issue 29
  13. Archive-name: NetHack3/Patch8k
  14. Patch-To: NetHack3: Volume 7, Issue 56-93
  15.  
  16.  
  17.  
  18. #! /bin/sh
  19. # This is a shell archive.  Remove anything before this line, then unpack
  20. # it by saving it into a file and typing "sh file".  To overwrite existing
  21. # files, type "sh file -c".  You can also feed this as standard input via
  22. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  23. # will see the following message at the end:
  24. #        "End of archive 11 (of 24)."
  25. # Contents:  patch8.11
  26. # Wrapped by billr@saab on Mon Jun  4 15:27:22 1990
  27. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  28. if test -f 'patch8.11' -a "${1}" != "-c" ; then 
  29.   echo shar: Will not clobber existing file \"'patch8.11'\"
  30. else
  31. echo shar: Extracting \"'patch8.11'\" \(50401 characters\)
  32. sed "s/^X//" >'patch8.11' <<'END_OF_FILE'
  33. X*** mac/Old/mac.c    Sun Jun  3 11:09:32 1990
  34. X--- mac/mac.c    Sat May 26 14:54:04 1990
  35. X***************
  36. X*** 11,24 ****
  37. X  WindowPtr    HackWindow;    /* points to Hack's window */
  38. X  extern char    *keys[8];
  39. X  extern short macflags;
  40. X  short cursorPos=0;
  41. X  short repDelay;
  42. X  long lastMD;
  43. X! struct line {
  44. X!     struct line *next_line;
  45. X!     char *line_text;
  46. X! } *mactexthead;
  47. X! short maclinect, macmaxlen;
  48. X  
  49. X  int
  50. X  tgetch()
  51. X--- 11,22 ----
  52. X  WindowPtr    HackWindow;    /* points to Hack's window */
  53. X  extern char    *keys[8];
  54. X  extern short macflags;
  55. X+ extern long lowMemLimit;
  56. X  short cursorPos=0;
  57. X  short repDelay;
  58. X  long lastMD;
  59. X! long segments = SEG_DO;
  60. X! extern short altCurs; /* should be a macflag */
  61. X  
  62. X  int
  63. X  tgetch()
  64. X***************
  65. X*** 32,38 ****
  66. X      register short    keyCode;
  67. X      short    temp;
  68. X      term_info    *t;
  69. X-     boolean    noControlKey;
  70. X      GrafPtr    oldPort,oldPort1;
  71. X      static char nextCommand;
  72. X      short aboutBox();
  73. X--- 30,35 ----
  74. X***************
  75. X*** 40,49 ****
  76. X      Point    mouseLoc;
  77. X      WindowPtr    theWindow;
  78. X      void    doUpdate();
  79. X- #define noEscapeKey    noControlKey
  80. X  #define    clearKey    0x47
  81. X  #define ESCAPEkey    0x1B
  82. X!     
  83. X      t = (term_info *)GetWRefCon(HackWindow);
  84. X      mouseLoc.h = (macflags & fMoveWRTMouse) ? t->tcur_x : (u.ux-1);
  85. X      mouseLoc.v = (macflags & fMoveWRTMouse) ? t->tcur_y : (u.uy+1);
  86. X--- 37,49 ----
  87. X      Point    mouseLoc;
  88. X      WindowPtr    theWindow;
  89. X      void    doUpdate();
  90. X  #define    clearKey    0x47
  91. X  #define ESCAPEkey    0x1B
  92. X!     static int see, saw = 0;
  93. X!     int eye, cursOff = 100;
  94. X!     boolean cursRectInv;    /* should be a macflag */
  95. X!     short    fInFront = TRUE;
  96. X! 
  97. X      t = (term_info *)GetWRefCon(HackWindow);
  98. X      mouseLoc.h = (macflags & fMoveWRTMouse) ? t->tcur_x : (u.ux-1);
  99. X      mouseLoc.v = (macflags & fMoveWRTMouse) ? t->tcur_y : (u.uy+1);
  100. X***************
  101. X*** 50,62 ****
  102. X      cursorRect.left = t->tcur_x * t->charWidth + Screen_Border;
  103. X      cursorRect.right = cursorRect.left + t->charWidth - 1;
  104. X      cursorRect.top = t->height * t->tcur_y + Screen_Border;
  105. X!     cursorRect.bottom = cursorRect.top + t->height;
  106. X      cursorTime = GetCaretTime();
  107. X!     noControlKey = (t->system.keyBoardType <= envMacPlusKbd) ? TRUE : FALSE;
  108. X!     box.left = mouseLoc.h * t->charWidth + Screen_Border;
  109. X!     box.right = box.left + t->charWidth;
  110. X!     box.top = mouseLoc.v * t->height + Screen_Border + t->height/2 - (t->charWidth/2);
  111. X!     box.bottom = box.top + t->charWidth;
  112. X      /* permit use of cursor keys and numeric keypad */
  113. X      /* does the same translation as in msdos.c but includes cursor keys */
  114. X      ch = '\0';
  115. X--- 50,61 ----
  116. X      cursorRect.left = t->tcur_x * t->charWidth + Screen_Border;
  117. X      cursorRect.right = cursorRect.left + t->charWidth - 1;
  118. X      cursorRect.top = t->height * t->tcur_y + Screen_Border;
  119. X!     cursorRect.bottom = cursorRect.top + t->height - 1;
  120. X      cursorTime = GetCaretTime();
  121. X!     box.left = mouseLoc.h * t->charWidth + Screen_Border - 1;
  122. X!     box.right = box.left + t->charWidth + 2;
  123. X!     box.top = mouseLoc.v * t->height + Screen_Border - 1;
  124. X!     box.bottom = box.top + t->height + 2;
  125. X      /* permit use of cursor keys and numeric keypad */
  126. X      /* does the same translation as in msdos.c but includes cursor keys */
  127. X      ch = '\0';
  128. X***************
  129. X*** 79,100 ****
  130. X      SetPort(HackWindow);
  131. X      if (!(macflags & fDoNonKeyEvt)) {
  132. X          cursorPos = -1;
  133. X!         SetCursor(&ARROW_CURSOR);
  134. X      }
  135. X!     /* do cursor blinking */
  136. X!     message = TickCount() + cursorTime;
  137. X!     if (!EventAvail(keyDownMask|mDownMask|autoKeyMask,&theEvent)) {
  138. X!         keyCode = true;
  139. X!         InvertRect(&cursorRect);
  140. X!     } else
  141. X!         keyCode = 0;
  142. X      while (!ch) {
  143. X!         (void)WaitNextEvent(everyEvent, &theEvent, 0L, 0L);
  144. X          if (theEvent.what == keyDown || theEvent.what == autoKey) {
  145. X              ch = 0;
  146. X              ObscureCursor();
  147. X              /* use raw key codes */
  148. X-             temp = keyCode;
  149. X              keyCode = (LoWord(theEvent.message) & keyCodeMask)>>8;
  150. X               if (keyCode == clearKey) {
  151. X                  macflags = macflags ^ fToggleNumPad;
  152. X--- 78,94 ----
  153. X      SetPort(HackWindow);
  154. X      if (!(macflags & fDoNonKeyEvt)) {
  155. X          cursorPos = -1;
  156. X!         if (! flags.wantspace) SetCursor(&ARROW_CURSOR);
  157. X      }
  158. X!     /* initialize cursor blinking */
  159. X!     message = TickCount();
  160. X!     cursRectInv = FALSE;
  161. X      while (!ch) {
  162. X!         (void)WaitNextEvent(everyEvent, &theEvent, (fInFront) ? 0L : 50L, 0L);
  163. X          if (theEvent.what == keyDown || theEvent.what == autoKey) {
  164. X              ch = 0;
  165. X              ObscureCursor();
  166. X              /* use raw key codes */
  167. X              keyCode = (LoWord(theEvent.message) & keyCodeMask)>>8;
  168. X               if (keyCode == clearKey) {
  169. X                  macflags = macflags ^ fToggleNumPad;
  170. X***************
  171. X*** 101,112 ****
  172. X                  SetWTitle(HackWindow,
  173. X                      (macflags & fToggleNumPad)    ? "\016NetHack [MOVE]"
  174. X                                                  : "\015NetHack [NUM]");
  175. X-                 keyCode = temp;
  176. X                  ch = 0;
  177. X                  continue;
  178. X              }
  179. X-             if (temp)
  180. X-                 InvertRect(&cursorRect);
  181. X              if ((macflags & fToggleNumPad) && (keyCode>0x40 &&keyCode < 0x5D) 
  182. X                  || (keyCode > 0x7A && keyCode<0x7F)) {
  183. X                  ch = t->keyMap[keyCode-65];
  184. X--- 95,103 ----
  185. X***************
  186. X*** 116,127 ****
  187. X                  if (ch)
  188. X                      break;
  189. X              }
  190. X!             if (keyCode == 50 && noEscapeKey) {
  191. X                  ch = (char)ESCAPEkey;    /* ESC */
  192. X                  break;
  193. X!             }            /* make the command key = control key on old Mac keyboards */
  194. X!             if ((theEvent.modifiers & cmdKey) && noControlKey) {
  195. X                  ch = (char)(theEvent.message & 0x1F);
  196. X                  break;
  197. X              }
  198. X              if (theEvent.modifiers & optionKey) {
  199. X--- 107,125 ----
  200. X                  if (ch)
  201. X                      break;
  202. X              }
  203. X!             if (t->system.keyBoardType < 4 && keyCode == 50) {
  204. X                  ch = (char)ESCAPEkey;    /* ESC */
  205. X                  break;
  206. X!             }            /* make the command key = control key on all non-adb keyboards
  207. X!                          Now, LEAVE it this way ! Otherwise you'll render non-us
  208. X! keyboards useless, since here is where "<" and ">" are located */
  209. X!             if ((theEvent.message & 0xFF) == 0x60) {
  210. X!                 ch = (char)ESCAPEkey;
  211. X!                 break;
  212. X!             } /* This is the way to fix backquote->esc for all macs */
  213. X!             if (theEvent.modifiers & cmdKey) {
  214. X                  ch = (char)(theEvent.message & 0x1F);
  215. X+                 if(ch == ('Q' & 0x1F)) ch = 'Q'; /* For Quit */
  216. X                  break;
  217. X              }
  218. X              if (theEvent.modifiers & optionKey) {
  219. X***************
  220. X*** 140,155 ****
  221. X          /* what other events to handle */
  222. X              switch (theEvent.what) {        
  223. X              case nullEvent:
  224. X                  GetPort(&oldPort1);
  225. X                  SetPort((GrafPtr)HackWindow);
  226. X                  /* wait until something occurs */
  227. X!                 if (TickCount() > message) {
  228. X                      message = TickCount() + cursorTime;
  229. X!                     if (!(macflags & fMoveWRTMouse)
  230. X!                         || (macflags & fMoveWRTMouse && !keyCode)) {
  231. X!                         InvertRect(&cursorRect);
  232. X!                         keyCode = !keyCode;
  233. X!                     }
  234. X                  }
  235. X                  if (FrontWindow() == HackWindow && (macflags & fDoNonKeyEvt)) {
  236. X                      if ((FindWindow(theEvent.where,&theWindow) == inContent)
  237. X--- 138,152 ----
  238. X          /* what other events to handle */
  239. X              switch (theEvent.what) {        
  240. X              case nullEvent:
  241. X+                 if (!fInFront)
  242. X+                     break;
  243. X                  GetPort(&oldPort1);
  244. X                  SetPort((GrafPtr)HackWindow);
  245. X                  /* wait until something occurs */
  246. X!                 if ((TickCount() > message) && (FrontWindow() == HackWindow)) {
  247. X                      message = TickCount() + cursorTime;
  248. X!                     InvertRect(&cursorRect);
  249. X!                     cursRectInv = !cursRectInv;
  250. X                  }
  251. X                  if (FrontWindow() == HackWindow && (macflags & fDoNonKeyEvt)) {
  252. X                      if ((FindWindow(theEvent.where,&theWindow) == inContent)
  253. X***************
  254. X*** 157,184 ****
  255. X                          
  256. X                          GetMouse(&mouseLoc);
  257. X                          if (PtInRect(mouseLoc,&box)) {
  258. X!                             CursHandle theCurs;
  259. X!                             
  260. X!                             theCurs = GetCursor(3);
  261. X!                             cursorPos = 8;
  262. X!                             SetCursor(*theCurs);
  263. X                          } else {
  264. X                              PtToAngle(&box,mouseLoc,&temp);
  265. X!                             if (temp >336 || temp < 23) {
  266. X!                                 temp = 0;
  267. X                              } else {
  268. X!                                 temp = (temp + 23)/45;
  269. X                              }
  270. X!                             if (temp >=0 && temp <8 && cursorPos != temp) {
  271. X!                                 SetCursor(*t->cursor[temp]);
  272. X!                                 cursorPos = temp;
  273. X! #ifdef THINK_C
  274. X!                                 repDelay = KeyThresh*2;
  275. X! #else
  276. X!                                 repDelay = 42;
  277. X! #endif
  278. X!                                 lastMD = theEvent.when;
  279. X                              }
  280. X                          }
  281. X                      } else if (cursorPos>=0) {
  282. X                          cursorPos = -1;
  283. X--- 154,203 ----
  284. X                          
  285. X                          GetMouse(&mouseLoc);
  286. X                          if (PtInRect(mouseLoc,&box)) {
  287. X!                             temp = 8;
  288. X                          } else {
  289. X                              PtToAngle(&box,mouseLoc,&temp);
  290. X!                             temp = ((temp + 22) / 45) % 8;    /* 0=N, 1=NE ... 7=NW */
  291. X!                         }
  292. X!                         /* since we're not doing anything let's look at the cursor */
  293. X!                         if (altCurs) {    /* this list is prioritized! */
  294. X!                             if (Sick) {
  295. X!                                 cursOff = 130;    /* offset for CURS resource set */
  296. X!                                 see = SICK;
  297. X!                             } else if (Blind) {
  298. X!                                 cursOff = 120;
  299. X!                                 see = BLINDED;
  300. X!                             } else if (Hallucination) {
  301. X!                                 cursOff = 110;
  302. X!                                 see = HALLUC;
  303. X!                             } else if (Confusion || Stunned) {
  304. X!                                 see = CONFUSION;
  305. X                              } else {
  306. X!                                 cursOff = 100;
  307. X!                                 see = 0;
  308. X                              }
  309. X!                         } else {
  310. X!                             see = (Confusion || Stunned) ? CONFUSION : 0;
  311. X!                             cursOff = 100;
  312. X!                         }
  313. X!                         if ((cursorPos != temp) || (see != saw)) {
  314. X!                             if (see != saw) {
  315. X!                                 switch(see) {
  316. X!                                 case CONFUSION:
  317. X!                                     break;
  318. X!                                 default:    /* hmm, a bit much for !altCurs */
  319. X!                                     for (eye=0; eye<=8; eye++) {
  320. X!                                         EmptyHandle(t->cursor[eye]);
  321. X!                                         t->cursor[eye] = GetCursor(eye+cursOff);
  322. X!                                         HNoPurge(t->cursor[eye]);
  323. X!                                     }
  324. X!                                     break;
  325. X!                                 }
  326. X!                                 saw = see;
  327. X                              }
  328. X+                             cursorPos = temp;
  329. X+                             eye = (Confusion || Stunned) ? rn2(9) : temp;
  330. X+                             SetCursor(*t->cursor[eye]);
  331. X                          }
  332. X                      } else if (cursorPos>=0) {
  333. X                          cursorPos = -1;
  334. X***************
  335. X*** 190,196 ****
  336. X                      ch = mButtonDown(theEvent, t, &nextCommand);
  337. X                      if (repDelay) {
  338. X  #ifdef THINK_C
  339. X!                         repDelay = KeyRepThresh*2;
  340. X  #else
  341. X                          repDelay /= 3;
  342. X  #endif
  343. X--- 209,215 ----
  344. X                      ch = mButtonDown(theEvent, t, &nextCommand);
  345. X                      if (repDelay) {
  346. X  #ifdef THINK_C
  347. X!                         repDelay = KeyRepThresh;
  348. X  #else
  349. X                          repDelay /= 3;
  350. X  #endif
  351. X***************
  352. X*** 209,214 ****
  353. X--- 228,234 ----
  354. X                      case kSuspendResumeMessage:
  355. X                          if (!SuspResIsResume(theEvent.message)) {
  356. X                          /* ---------- SUSPEND EVENT ------------ */
  357. X+                             fInFront = FALSE;
  358. X                              if (macflags & fZoomOnContextSwitch
  359. X                                  && !EmptyRect(&(**(HackWindow)->visRgn).rgnBBox))
  360. X                              {
  361. X***************
  362. X*** 217,222 ****
  363. X--- 237,243 ----
  364. X                              }
  365. X                          } else {
  366. X                          /* ---------- RESUME EVENT ------------- */
  367. X+                             fInFront = TRUE;
  368. X                              if (macflags & fZoomOnContextSwitch) {
  369. X                                  SizeWindow(HackWindow,
  370. X                                   (t->maxCol * t->charWidth) + 2 * Screen_Border,
  371. X***************
  372. X*** 244,249 ****
  373. X--- 265,271 ----
  374. X              case updateEvt:
  375. X                  if (HackWindow == (WindowPtr)theEvent.message) {
  376. X                      doUpdate(t);
  377. X+                     if (cursRectInv) InvertRect(&cursorRect);    /* restore cursor */
  378. X                  }
  379. X                  break;
  380. X                  
  381. X***************
  382. X*** 278,289 ****
  383. X                  
  384. X              case mouseDown:
  385. X                  ch = mButtonDown(theEvent, t, &nextCommand);
  386. X                  break;
  387. X              }
  388. X          }        
  389. X      }
  390. X!     if (keyCode && ch && (theEvent.what != keyDown && theEvent.what != autoKey))
  391. X!         InvertRect(&cursorRect);
  392. X  
  393. X      SetPort(oldPort);
  394. X      return ((ch == '\r') ? '\n' : ch);
  395. X--- 300,316 ----
  396. X                  
  397. X              case mouseDown:
  398. X                  ch = mButtonDown(theEvent, t, &nextCommand);
  399. X+ #ifdef THINK_C
  400. X+                 repDelay = KeyThresh;
  401. X+ #else
  402. X+                 repDelay = 42;
  403. X+ #endif
  404. X+                 lastMD = theEvent.when;
  405. X                  break;
  406. X              }
  407. X          }        
  408. X      }
  409. X!     if (cursRectInv) InvertRect(&cursorRect);
  410. X  
  411. X      SetPort(oldPort);
  412. X      return ((ch == '\r') ? '\n' : ch);
  413. X***************
  414. X*** 293,300 ****
  415. X  doUpdate(t)
  416. X  term_info    *t;
  417. X  {
  418. X!     short    temp;
  419. X      GrafPtr    oldPort;
  420. X  #ifdef TEXTCOLOR
  421. X      if (t->system.hasColorQD) {
  422. X          Rect    r;
  423. X--- 320,329 ----
  424. X  doUpdate(t)
  425. X  term_info    *t;
  426. X  {
  427. X!     register short    temp;
  428. X      GrafPtr    oldPort;
  429. X+     register    short i,j;
  430. X+     register char    attr, *p;
  431. X  #ifdef TEXTCOLOR
  432. X      if (t->system.hasColorQD) {
  433. X          Rect    r;
  434. X***************
  435. X*** 312,381 ****
  436. X      GetPort(&oldPort);
  437. X      SetPort((GrafPtr)HackWindow);
  438. X      BeginUpdate(HackWindow);
  439. X!     if (t->inColor && (macflags & fDoUpdate) && !(macflags & 0x2000)) {
  440. X!         char    *tmp;
  441. X!         short    x,y;
  442. X!         
  443. X!         tmp = calloc(2*t->maxCol, sizeof(char));
  444. X!         BlockMove(t->screen[0], tmp, t->maxCol);
  445. X!         BlockMove(t->screen[1], &tmp[t->maxCol], t->maxCol);
  446. X!         x = t->tcur_x;
  447. X!         y = t->tcur_y;
  448. X!         temp = flags.toplin;
  449. X!         flags.toplin = 0;
  450. X!         docrt();
  451. X!         flags.toplin = temp;
  452. X!         BlockMove(tmp, t->screen[0], t->maxCol);
  453. X!         BlockMove(&tmp[t->maxCol], t->screen[1], t->maxCol);
  454. X!         free(tmp);
  455. X!         t->tcur_y = y;
  456. X!         t->tcur_x = x;
  457. X!     }
  458. X!     if (macflags & fDoUpdate) {
  459. X!         for (temp = 0;
  460. X!             temp < ((t->inColor && !(macflags & fFullScrKluge))
  461. X!                 ? 2 : t->maxRow);
  462. X!             temp++) {
  463. X!             if ((macflags & fScreenKluges) == fScreenKluges
  464. X!                 && temp == t->maxRow-1){
  465. X!                 if(flags.standout)
  466. X!                     standoutbeg();
  467. X!             }
  468. X!             MoveTo(Screen_Border,
  469. X!                 t->ascent + (temp * t->height) + Screen_Border);
  470. X!             DrawText(&t->screen[temp][0], 0, t->maxCol);
  471. X!             if ((macflags & fScreenKluges) == fScreenKluges
  472. X!                 && temp == t->maxRow-1){
  473. X!                 if(flags.standout)
  474. X!                     standoutend();
  475. X!             }
  476. X!         }
  477. X! 
  478. X!         if (macflags & fDisplayKluge) {
  479. X!             register struct line *tl;
  480. X!             int curline, lth;
  481. X!             
  482. X!             if(flags.toplin == 1) more();    /* ab@unido */
  483. X!             remember_topl();
  484. X!         
  485. X!             lth = CO - macmaxlen - 2;           /* Use full screen width */
  486. X!             if (maclinect < LI && lth >= 10) {             /* in a corner */
  487. X!                 home ();
  488. X!                 cl_end ();
  489. X!                 flags.toplin = 0;
  490. X!                 curline = 1;
  491. X!                 for (tl = mactexthead; tl; tl = tl->next_line) {
  492. X!                     curs (lth, curline);
  493. X!                     if(curline > 1)
  494. X!                         cl_end ();
  495. X!                     xputs(tl->line_text);
  496. X!                     curx = curx + strlen(tl->line_text);
  497. X!                     curline++;
  498. X                  }
  499. X!                 curs (lth, curline);
  500. X              }
  501. X!         }
  502. X!     }
  503. X      EndUpdate(HackWindow);
  504. X      SetPort(oldPort);
  505. X  }
  506. X--- 341,417 ----
  507. X      GetPort(&oldPort);
  508. X      SetPort((GrafPtr)HackWindow);
  509. X      BeginUpdate(HackWindow);
  510. X!     ForeColor(t->color[0]);
  511. X!     BackColor(t->color[7]);
  512. X!     for (i = 0; i<t->maxRow; i++) {
  513. X!         p = t->scrAttr[i];
  514. X!         for (j = temp = 0, attr = *p; j<t->maxCol; j +=1, p++) {
  515. X!             if (*p != attr) {
  516. X!                 MoveTo(Screen_Border + temp*t->charWidth,
  517. X!                     t->ascent + (i * t->height) +
  518. X!                     Screen_Border);
  519. X!                 if (attr & 0x80) {
  520. X!                     ForeColor(t->color[7]);
  521. X!                     BackColor(t->color[0]);
  522. X!                 } else if (t->inColor) {
  523. X!                     ForeColor(t->color[attr]);
  524. X!                      /* yellow fgnd hard to see on white bgnd */
  525. X!                      /* so change to green background */
  526. X!                     switch(attr) {
  527. X!                     case BROWN:
  528. X!                         BackColor(t->color[GREEN]);
  529. X!                         break;
  530. X!                     case BLUE:
  531. X!                         BackColor(t->color[CYAN]);
  532. X!                         break;
  533. X!                     case CYAN:
  534. X!                         BackColor(t->color[BLUE]);
  535. X!                         break;
  536. X!                     default:
  537. X!                         BackColor(t->color[7]);
  538. X!                            break;
  539. X!                     }
  540. X!                 } else {
  541. X!                     ForeColor(t->color[0]);
  542. X!                     BackColor(t->color[7]);
  543. X!                 }
  544. X!                 DrawText(&(t->screen[i][temp]), 0, j - temp);
  545. X!                 temp = j;
  546. X!                 attr = *p;
  547. X!             } /* if */
  548. X!         } /* for j */
  549. X!         if (temp != t->maxCol) {
  550. X!             MoveTo(Screen_Border + temp*t->charWidth,
  551. X!                 t->ascent + (i * t->height) +
  552. X!                 Screen_Border);
  553. X!             if (attr & 0x80) {
  554. X!                 ForeColor(t->color[7]);
  555. X!                 BackColor(t->color[0]);
  556. X!             } else if (t->inColor) {
  557. X!                 ForeColor(t->color[attr]);
  558. X!                  /* yellow fgnd hard to see on white bgnd */
  559. X!                  /* so change to green background */
  560. X!                 switch(attr) {
  561. X!                 case BROWN:
  562. X!                     BackColor(t->color[GREEN]);
  563. X!                     break;
  564. X!                 case BLUE:
  565. X!                     BackColor(t->color[CYAN]);
  566. X!                     break;
  567. X!                 case CYAN:
  568. X!                     BackColor(t->color[BLUE]);
  569. X!                     break;
  570. X!                 default:
  571. X!                     BackColor(t->color[7]);
  572. X!                        break;
  573. X                  }
  574. X!             } else {
  575. X!                 ForeColor(t->color[0]);
  576. X!                 BackColor(t->color[7]);
  577. X              }
  578. X!             DrawText(&(t->screen[i][temp]), 0, j - temp);
  579. X!         } /* if */
  580. X!     } /* for i */
  581. X      EndUpdate(HackWindow);
  582. X      SetPort(oldPort);
  583. X  }
  584. X***************
  585. X*** 399,405 ****
  586. X      if (macflags & fDoNonKeyEvt) {
  587. X          switch (FindWindow(theEvent.where,&theWindow)) {
  588. X          case inMenuBar:
  589. X! 
  590. X          SetCursor(&ARROW_CURSOR);
  591. X          message = MenuSelect(theEvent.where);
  592. X  
  593. X--- 435,442 ----
  594. X      if (macflags & fDoNonKeyEvt) {
  595. X          switch (FindWindow(theEvent.where,&theWindow)) {
  596. X          case inMenuBar:
  597. X!         if (!(macflags & fDoMenus))
  598. X!             break;
  599. X          SetCursor(&ARROW_CURSOR);
  600. X          message = MenuSelect(theEvent.where);
  601. X  
  602. X***************
  603. X*** 509,519 ****
  604. X                  box.bottom = box.top + 1;
  605. X                  GetMouse(&mouseLoc);
  606. X                  PtToAngle(&box,mouseLoc,&temp);
  607. X!                 if (temp >337 || temp < 23) {
  608. X!                     temp = 0;
  609. X!                 } else {
  610. X!                     temp = (temp + 23)/45;
  611. X!                 }
  612. X                  switch(cursorPos) {
  613. X                      case 0:
  614. X                          ch = 'k';
  615. X--- 546,552 ----
  616. X                  box.bottom = box.top + 1;
  617. X                  GetMouse(&mouseLoc);
  618. X                  PtToAngle(&box,mouseLoc,&temp);
  619. X!                 temp = ((temp + 22) / 45) % 8;    /* ~same as above */
  620. X                  switch(cursorPos) {
  621. X                      case 0:
  622. X                          ch = 'k';
  623. X***************
  624. X*** 551,557 ****
  625. X          break;
  626. X          }
  627. X      } else {
  628. X!         if(flags.wantspace) ch = 0x20;
  629. X      }
  630. X      return ch;
  631. X  }
  632. X--- 584,596 ----
  633. X          break;
  634. X          }
  635. X      } else {
  636. X!         switch (FindWindow(theEvent.where,&theWindow)) {
  637. X!         case inContent:
  638. X!             if(flags.wantspace) ch = 0x20;
  639. X!             break;
  640. X!         default:
  641. X!             break;
  642. X!         }
  643. X      }
  644. X      return ch;
  645. X  }
  646. X***************
  647. X*** 635,647 ****
  648. X  {
  649. X      if (t->tcur_y >= t->maxRow-1) {
  650. X          short    temp;
  651. X!         char    *s;
  652. X  
  653. X          BlockMove((Ptr)t->screen[1], (Ptr)t->screen[0],
  654. X              (Size)((t->maxRow - 1) * t->maxCol));
  655. X!         for (temp = 0, s = t->screen[t->maxRow - 1];
  656. X!                 temp < t->maxCol; temp++, s++) {
  657. X              *s = ' ';
  658. X          }
  659. X          {
  660. X              Pattern p, o;
  661. X--- 674,689 ----
  662. X  {
  663. X      if (t->tcur_y >= t->maxRow-1) {
  664. X          short    temp;
  665. X!         char    *s, *s1;
  666. X  
  667. X          BlockMove((Ptr)t->screen[1], (Ptr)t->screen[0],
  668. X              (Size)((t->maxRow - 1) * t->maxCol));
  669. X!         BlockMove((Ptr)t->scrAttr[1], (Ptr)t->scrAttr[0],
  670. X!             (Size)((t->maxRow - 1) * t->maxCol));
  671. X!         for (temp = 0, s = t->screen[t->maxRow - 1], s1 = t->scrAttr[t->maxRow - 1];
  672. X!                 temp < t->maxCol; temp++, s++, s1++) {
  673. X              *s = ' ';
  674. X+             *s1 = 0;
  675. X          }
  676. X          {
  677. X              Pattern p, o;
  678. X***************
  679. X*** 698,705 ****
  680. X      if (!strncmp(s, "\033[", 2)) {
  681. X          switch(*(s + 2)) {
  682. X          case 'c':    /* color kluge */
  683. X-             if (t->inColor) {
  684. X              temp = (short)(*(s + 3) - 'a');
  685. X              if (temp >= BLACK && temp < MAXCOLORS &&
  686. X                  (temp % (MAXCOLORS / 2) != GRAY)) /* set colour */
  687. X                  ForeColor(t->color[temp % (MAXCOLORS / 2)]);
  688. X--- 740,753 ----
  689. X      if (!strncmp(s, "\033[", 2)) {
  690. X          switch(*(s + 2)) {
  691. X          case 'c':    /* color kluge */
  692. X              temp = (short)(*(s + 3) - 'a');
  693. X+             t->curAttr = temp;
  694. X+             if (temp >= BLACK && temp < MAXCOLORS &&
  695. X+                 (temp % (MAXCOLORS / 2) != GRAY)) /* set colour */
  696. X+                 t->curAttr = temp % (MAXCOLORS / 2);
  697. X+             if ((temp & 0x07) == GRAY)
  698. X+                 t->curAttr = 0;
  699. X+             if (t->inColor) {
  700. X              if (temp >= BLACK && temp < MAXCOLORS &&
  701. X                  (temp % (MAXCOLORS / 2) != GRAY)) /* set colour */
  702. X                  ForeColor(t->color[temp % (MAXCOLORS / 2)]);
  703. X***************
  704. X*** 719,724 ****
  705. X--- 767,774 ----
  706. X              if (*(s + 3) == 'm') {
  707. X                  ForeColor(t->color[0]);
  708. X                  BackColor(t->color[7]);
  709. X+                 t->curHilite = FALSE;
  710. X+                 t->curAttr = 0;
  711. X              }
  712. X              break;
  713. X          case '1':    /* inverse video begin */
  714. X***************
  715. X*** 725,730 ****
  716. X--- 775,782 ----
  717. X              if (*(s + 3) == 'm') {
  718. X                  ForeColor(t->color[7]);
  719. X                  BackColor(t->color[0]);
  720. X+                 t->curHilite = TRUE;
  721. X+                 t->curAttr = 0;
  722. X              }
  723. X              break;
  724. X          case 'A':    /* cursor up */
  725. X***************
  726. X*** 762,769 ****
  727. X              eraseRect.bottom = eraseRect.top + t->height;
  728. X              eraseRect.right = (t->maxCol*t->charWidth) + Screen_Border;
  729. X              EraseRect(&eraseRect);
  730. X!             for (temp = x, c = &(t->screen[y][x]); temp < t->maxCol; temp++)
  731. X                  *c++ = ' ';
  732. X              break;
  733. X          case '2':
  734. X              if (*(s+3) == 'J') {    /* clear screen */
  735. X--- 814,824 ----
  736. X              eraseRect.bottom = eraseRect.top + t->height;
  737. X              eraseRect.right = (t->maxCol*t->charWidth) + Screen_Border;
  738. X              EraseRect(&eraseRect);
  739. X!             for (temp = x, c = &(t->screen[y][x]), c1 = &(t->scrAttr[y][x]);
  740. X!                 temp < t->maxCol; temp++) {
  741. X                  *c++ = ' ';
  742. X+                 *c1++ = 0;
  743. X+             }
  744. X              break;
  745. X          case '2':
  746. X              if (*(s+3) == 'J') {    /* clear screen */
  747. X***************
  748. X*** 772,779 ****
  749. X              eraseRect.bottom = t->maxRow*t->height + Screen_Border;
  750. X              eraseRect.right = t->charWidth*t->maxCol + Screen_Border;
  751. X              EraseRect(&eraseRect);
  752. X!             for (y = 0, c = t->screen[0]; y < t->maxCol * t->maxRow; y++) {
  753. X                      *c++ = ' ';
  754. X              }
  755. X              cur.h = Screen_Border;
  756. X              cur.v = t->ascent + Screen_Border;
  757. X--- 827,836 ----
  758. X              eraseRect.bottom = t->maxRow*t->height + Screen_Border;
  759. X              eraseRect.right = t->charWidth*t->maxCol + Screen_Border;
  760. X              EraseRect(&eraseRect);
  761. X!             for (y = 0, c = t->screen[0], c1 = t->scrAttr[0];
  762. X!                 y < t->maxCol * t->maxRow; y++) {
  763. X                      *c++ = ' ';
  764. X+                     *c1++ = 0;
  765. X              }
  766. X              cur.h = Screen_Border;
  767. X              cur.v = t->ascent + Screen_Border;
  768. X***************
  769. X*** 808,813 ****
  770. X--- 865,872 ----
  771. X              }
  772. X              DrawText((Ptr)stmp, 0, temp);
  773. X              BlockMove((Ptr)stmp, (Ptr)&(t->screen[y][x]), (long)temp);
  774. X+             memset(&(t->scrAttr[y][x]), ((t->curHilite) ? 128 : 0) + t->curAttr,
  775. X+                 temp);
  776. X              stmp += temp + 1;
  777. X              charleft -= temp + 1;
  778. X              if (!savech) {
  779. X***************
  780. X*** 897,902 ****
  781. X--- 956,962 ----
  782. X          }
  783. X      } else {
  784. X          t->screen[y][x] = c;
  785. X+         t->scrAttr[y][x] = ((t->curHilite) ? 128 : 0) + t->curAttr;
  786. X          DrawText(&c, 0, 1);
  787. X          if (!savech) {
  788. X              t->tcur_x++;
  789. X***************
  790. X*** 979,987 ****
  791. X                  c = *(fstr + 1);
  792. X                  *(fstr + 1) = '\0';
  793. X                  if (islong)
  794. X!                     sprintf(numAsStr, s, num);
  795. X                  else
  796. X!                     sprintf(numAsStr, s, (short)num);
  797. X                  *(fstr + 1) = c;
  798. X                  Strcpy(pb, numAsStr);
  799. X                  pb = (char *)(pb + strlen(numAsStr));
  800. X--- 1039,1047 ----
  801. X                  c = *(fstr + 1);
  802. X                  *(fstr + 1) = '\0';
  803. X                  if (islong)
  804. X!                     Sprintf(numAsStr, s, num);
  805. X                  else
  806. X!                     Sprintf(numAsStr, s, (short)num);
  807. X                  *(fstr + 1) = c;
  808. X                  Strcpy(pb, numAsStr);
  809. X                  pb = (char *)(pb + strlen(numAsStr));
  810. X***************
  811. X*** 1095,1102 ****
  812. X              ModalDialog(NULL, &itemHit);
  813. X          }
  814. X      } else {
  815. X!         while (!itemHit) {
  816. X!             SystemTask();
  817. X              if (GetNextEvent(everyEvent,&theEvent))
  818. X                  if (theEvent.what == mouseDown ||
  819. X                            theEvent.what == keyDown ||
  820. X--- 1155,1165 ----
  821. X              ModalDialog(NULL, &itemHit);
  822. X          }
  823. X      } else {
  824. X!         long    tickNum;
  825. X! 
  826. X!         tickNum = TickCount() + 180;    /* 3 second wait max */
  827. X!         while (!itemHit && TickCount()<tickNum) {
  828. X!         /*    SystemTask();*/
  829. X              if (GetNextEvent(everyEvent,&theEvent))
  830. X                  if (theEvent.what == mouseDown ||
  831. X                            theEvent.what == keyDown ||
  832. X***************
  833. X*** 1109,1111 ****
  834. X--- 1172,1232 ----
  835. X      SetPort(oldPort);
  836. X      return (itemHit == MORE_INFO_BUTTON);
  837. X  }
  838. X+ 
  839. X+ void
  840. X+ freeSegs(segs)
  841. X+ long    *segs;
  842. X+ {
  843. X+     register long s;
  844. X+     
  845. X+     s = (segs == (long *)0) ? 0L : (*segs);
  846. X+     
  847. X+     UnloadSeg(dothrow);
  848. X+     UnloadSeg(dowear);
  849. X+     UnloadSeg(ddocall);
  850. X+     UnloadSeg(castmu);
  851. X+     UnloadSeg(doforce);
  852. X+     if (!(s & SEG_EAT))
  853. X+         UnloadSeg(doeat);
  854. X+     if (!(s & SEG_ZAP))
  855. X+         UnloadSeg(dozap);
  856. X+     UnloadSeg(initterm);
  857. X+     if (!(s & SEG_APPLY))
  858. X+         UnloadSeg(doapply);
  859. X+     UnloadSeg(dokick);
  860. X+     UnloadSeg(outrumor);
  861. X+     if (!(s & SEG_DO))
  862. X+         UnloadSeg(steal);
  863. X+     UnloadSeg(done1);
  864. X+     if (!(s & SEG_POTION))
  865. X+         UnloadSeg(dodrink);
  866. X+     UnloadSeg(doturn);
  867. X+ #ifdef REINCARNATION
  868. X+     UnloadSeg(makeroguerooms);
  869. X+ #endif
  870. X+ #ifdef STRONGHOLD
  871. X+     UnloadSeg(load_special);
  872. X+ #endif
  873. X+     UnloadSeg(mklev);
  874. X+ #ifdef MUSIC
  875. X+     if (!(s & SEG_SPELL))
  876. X+         UnloadSeg(do_play_instrument);
  877. X+ #endif
  878. X+ #ifdef SPELLS
  879. X+     if (!(s & SEG_SPELL))
  880. X+         UnloadSeg(docast);
  881. X+ #endif
  882. X+     UnloadSeg(savebones);
  883. X+     UnloadSeg(expels);
  884. X+     UnloadSeg(attack);
  885. X+     UnloadSeg(doname);
  886. X+     if (FreeMem() < lowMemLimit)
  887. X+     {
  888. X+         long    space;
  889. X+         
  890. X+         space = 0x7FFFFFFFL;
  891. X+         MaxMem(&space);
  892. X+     }
  893. X+ 
  894. X+ }
  895. X+ 
  896. X*** mac/Old/macinit.c    Sun Jun  3 11:10:27 1990
  897. X--- mac/macinit.c    Tue May 22 20:40:33 1990
  898. X***************
  899. X*** 27,32 ****
  900. X--- 27,33 ----
  901. X  } defaultData;
  902. X  #define    fDFZoomWindow    0x02L
  903. X  #define    fDFUseDefaultFont    0x01L
  904. X+ short altCurs;
  905. X  
  906. X  
  907. X  int
  908. X***************
  909. X*** 35,41 ****
  910. X  {
  911. X      register short    i, j;
  912. X      short        tempFont, tempSize, fontNum, size;
  913. X!     char    *l;
  914. X      EventRecord    theEvent;
  915. X      FontInfo    fInfo;
  916. X      Handle    temp;
  917. X--- 36,42 ----
  918. X  {
  919. X      register short    i, j;
  920. X      short        tempFont, tempSize, fontNum, size;
  921. X!     char    *l, *m;
  922. X      EventRecord    theEvent;
  923. X      FontInfo    fInfo;
  924. X      Handle    temp;
  925. X***************
  926. X*** 80,86 ****
  927. X      theMenu = NewMenu(appleMenu, "\001\024");    /*  apple menu  */
  928. X      {
  929. X          char    tmp[256];
  930. X!         sprintf(&tmp[1],"About NetHack %s\311;(-", VERSION);
  931. X          tmp[0] = (char)strlen(&tmp[1]);
  932. X          AppendMenu(theMenu,tmp);
  933. X      }
  934. X--- 81,87 ----
  935. X      theMenu = NewMenu(appleMenu, "\001\024");    /*  apple menu  */
  936. X      {
  937. X          char    tmp[256];
  938. X!         Sprintf(&tmp[1],"About NetHack %s\311;(-", VERSION);
  939. X          tmp[0] = (char)strlen(&tmp[1]);
  940. X          AppendMenu(theMenu,tmp);
  941. X      }
  942. X***************
  943. X*** 125,131 ****
  944. X          size = 12;
  945. X      else
  946. X          size = 9;
  947. X!     strcpy((char *)&font[0], "\006Monaco");
  948. X      
  949. X      temp = GetResource(HACK_DATA, DEFAULT_DATA);
  950. X      if (temp) {
  951. X--- 126,132 ----
  952. X          size = 12;
  953. X      else
  954. X          size = 9;
  955. X!     Strcpy((char *)&font[0], "\006Monaco");
  956. X      
  957. X      temp = GetResource(HACK_DATA, DEFAULT_DATA);
  958. X      if (temp) {
  959. X***************
  960. X*** 222,236 ****
  961. X--- 223,243 ----
  962. X          TOP_OFFSET + (row * t->height) + 2 * Screen_Border + 10);
  963. X      
  964. X      t->screen = (char **)malloc(row * sizeof(char *));
  965. X+     t->scrAttr = (char **)malloc(row * sizeof(char *));
  966. X      l = malloc(row * col * sizeof(char));
  967. X+     m = malloc(row * col * sizeof(char));
  968. X      for (i = 0;i < row;i++) {
  969. X          t->screen[i] = (char *)(l + (i * col * sizeof(char)));
  970. X+         t->scrAttr[i] = (char *)(m + (i * col * sizeof(char)));
  971. X      }
  972. X      for (i = 0; i < row; i++) {
  973. X          for (j = 0; j < col; j++) {
  974. X              t->screen[i][j] = ' ';
  975. X+             t->scrAttr[i][j] = '\0';
  976. X          }
  977. X      }
  978. X+     t->curHilite = 0;
  979. X+     t->curAttr = 0;
  980. X  
  981. X      /* give time for Multifinder to bring NetHack window to front */
  982. X      for(tempFont = 0; tempFont<10; tempFont++) {
  983. X***************
  984. X*** 290,297 ****
  985. X          panic("Can't get OBJECT resource data.");
  986. X      }
  987. X      
  988. X!     for (i = 0; i<8; i++) {
  989. X!         t->cursor[i] = GetCursor(100+i);
  990. X      }
  991. X      
  992. X      (void)aboutBox(0);    
  993. X--- 297,306 ----
  994. X          panic("Can't get OBJECT resource data.");
  995. X      }
  996. X      
  997. X!     for (j = 30; j >= 0; j -= 10) {
  998. X!         for (i = 0; i<=8; i++) {
  999. X!             t->cursor[i] = GetCursor(100+i+j);    /* self-contained cursors */
  1000. X!         }
  1001. X      }
  1002. X      
  1003. X      (void)aboutBox(0);    
  1004. X***************
  1005. X*** 380,392 ****
  1006. X  int
  1007. X  read_config_file()
  1008. X  {
  1009. X! 
  1010. X      int optfd;
  1011. X      optfd = 0;
  1012. X!     if ( (optfd = open(OPTIONS, OMASK)) > (int)NULL){
  1013. X          read_opts(optfd);
  1014. X          (void) close(optfd);
  1015. X      }
  1016. X  }
  1017. X  
  1018. X  int
  1019. X--- 389,413 ----
  1020. X  int
  1021. X  read_config_file()
  1022. X  {
  1023. X!     term_info    *t;
  1024. X      int optfd;
  1025. X+     Str255    name;
  1026. X+     short    oldVol;
  1027. X+     
  1028. X      optfd = 0;
  1029. X!     t = (term_info *)GetWRefCon(HackWindow);
  1030. X! 
  1031. X!     GetVol(name, &oldVol);
  1032. X!     SetVol(0L, t->system.sysVRefNum);
  1033. X!     if ( (optfd = open(OPTIONS, OMASK)) <= 0) {
  1034. X!         SetVol(0L, t->recordVRefNum);
  1035. X!         optfd = open(OPTIONS, OMASK);
  1036. X!     }
  1037. X!     if ( optfd > (short)NULL){
  1038. X          read_opts(optfd);
  1039. X          (void) close(optfd);
  1040. X      }
  1041. X+     SetVol(0L, oldVol);
  1042. X  }
  1043. X  
  1044. X  int
  1045. X***************
  1046. X*** 394,408 ****
  1047. X  {
  1048. X      int fd;
  1049. X      short temp_flags;
  1050. X  
  1051. X      if((fd = open(OPTIONS, O_WRONLY | O_BINARY)) <= 0) {
  1052. X          OSErr    result;
  1053. X          char    *tmp;
  1054. X          
  1055. X!         tmp = CtoPstr(OPTIONS);
  1056. X!         result = Create((StringPtr)tmp, (short)0, CREATOR, AUXIL_TYPE);
  1057. X!          if (result == noErr)
  1058. X!              fd = open(OPTIONS, O_WRONLY | O_BINARY);
  1059. X       }
  1060. X  
  1061. X      if (fd < 0)
  1062. X--- 415,437 ----
  1063. X  {
  1064. X      int fd;
  1065. X      short temp_flags;
  1066. X+     term_info    *t;
  1067. X  
  1068. X+     t = (term_info *)GetWRefCon(HackWindow);
  1069. X+     SetVol(0L, t->system.sysVRefNum);
  1070. X+ 
  1071. X      if((fd = open(OPTIONS, O_WRONLY | O_BINARY)) <= 0) {
  1072. X          OSErr    result;
  1073. X          char    *tmp;
  1074. X          
  1075. X!         SetVol(0L, t->recordVRefNum);
  1076. X!         if((fd = open(OPTIONS, O_WRONLY | O_BINARY)) <= 0) {
  1077. X!             SetVol(0L, t->system.sysVRefNum);
  1078. X!             tmp = CtoPstr(OPTIONS);
  1079. X!             result = Create((StringPtr)tmp, (short)0, CREATOR, AUXIL_TYPE);
  1080. X!              if (result == noErr)
  1081. X!                  fd = open(OPTIONS, O_WRONLY | O_BINARY);
  1082. X!         }
  1083. X       }
  1084. X  
  1085. X      if (fd < 0)
  1086. X***************
  1087. X*** 418,423 ****
  1088. X--- 447,454 ----
  1089. X          
  1090. X          temp_flags = (macflags & fZoomOnContextSwitch) ? 1 : 0;
  1091. X          write(fd, &temp_flags, sizeof(short));
  1092. X+ 
  1093. X+         write(fd, &altCurs, sizeof(short));
  1094. X      
  1095. X  #ifdef TUTTI_FRUTTI
  1096. X          write(fd, pl_fruit, PL_FSIZ);
  1097. X***************
  1098. X*** 425,430 ****
  1099. X--- 456,464 ----
  1100. X          write(fd, inv_order, strlen(inv_order)+1);
  1101. X          close(fd);
  1102. X      }
  1103. X+     
  1104. X+     SetVol(0L, t->recordVRefNum);
  1105. X+     
  1106. X      return 0;
  1107. X  }
  1108. X  
  1109. X***************
  1110. X*** 448,459 ****
  1111. X      else
  1112. X          macflags &= ~fZoomOnContextSwitch;
  1113. X  
  1114. X  #ifdef TUTTI_FRUTTI
  1115. X      read(fd, pl_fruit, PL_FSIZ);
  1116. X  #endif
  1117. X      read(fd,tmp_order,strlen(inv_order)+1);
  1118. X      if(strlen(tmp_order) == strlen(inv_order))
  1119. X!         strcpy(inv_order,tmp_order);
  1120. X      return 0;
  1121. X  }
  1122. X  
  1123. X--- 482,496 ----
  1124. X      else
  1125. X          macflags &= ~fZoomOnContextSwitch;
  1126. X  
  1127. X+     read(fd, &altCurs, sizeof(short));
  1128. X+     
  1129. X  #ifdef TUTTI_FRUTTI
  1130. X      read(fd, pl_fruit, PL_FSIZ);
  1131. X  #endif
  1132. X      read(fd,tmp_order,strlen(inv_order)+1);
  1133. X      if(strlen(tmp_order) == strlen(inv_order))
  1134. X!         Strcpy(inv_order,tmp_order);
  1135. X!         
  1136. X      return 0;
  1137. X  }
  1138. X  
  1139. X*** ./Old/Install.ami    Sun Jun  3 11:36:59 1990
  1140. X--- ./Install.ami    Sat Jun  2 19:45:10 1990
  1141. X***************
  1142. X*** 2,8 ****
  1143. X      Instructions for compiling and installing NetHack 3.0
  1144. X              on an AMIGA system
  1145. X      =====================================================
  1146. X!             Last Revision: 17 Feb 1990
  1147. X  
  1148. X  Overview
  1149. X  --------
  1150. X--- 2,8 ----
  1151. X      Instructions for compiling and installing NetHack 3.0
  1152. X              on an AMIGA system
  1153. X      =====================================================
  1154. X!             Last Revision: 27 May 1990
  1155. X  
  1156. X  Overview
  1157. X  --------
  1158. X***************
  1159. X*** 16,21 ****
  1160. X--- 16,33 ----
  1161. X      Section III and IV are compiler specific sections, with section III
  1162. X      designed for Lattice users, and section IV for Manx/Aztec users.
  1163. X  
  1164. X+ Requirements
  1165. X+ ------------
  1166. X+     Amiga 500,1000,2000,2500  running WorkBench 1.3 and KickStart 1.2 or 1.3.
  1167. X+     (As of this time, the Amiga 3000 running beta-release versions of
  1168. X+     WorkBench 2.0 are not supported.  While the core of the game appears to
  1169. X+     function, the custom font is not recognized by the operating system.
  1170. X+     The NetHack team welcomes reports of specific problems and solutions on
  1171. X+     this [or any other] subject.)
  1172. X+     one meg of RAM and one floppy drive (painful, but functional)
  1173. X+ or    one meg of RAM and two floppy drives (much better)
  1174. X+ or    more than one meg of RAM and a hard disk with 2+ meg free (best)
  1175. X+ 
  1176. X  Credits
  1177. X  -------
  1178. X      Olaf Seibert first ported NetHack 2.3 and 3.0 to the Amiga.  Richard
  1179. X***************
  1180. X*** 39,52 ****
  1181. X          + NetHack.info
  1182. X          + NewGame.info
  1183. X          + NetHackScore.info
  1184. X          + default.icon
  1185. X!     * Special NetHack font.
  1186. X  
  1187. X      Installation Steps:
  1188. X  
  1189. X      1) If you have a hard disk, create a directory named NetHack.
  1190. X         Assign Nethack: to be the path to this directory.  If you have a
  1191. X!        floppy, format a disk named NetHack.
  1192. X  
  1193. X      2) If you have a hard disk, assign HackExe: to the above directory.
  1194. X         If you have a floppy, format an additional disk named HackExe.
  1195. X--- 51,67 ----
  1196. X          + NetHack.info
  1197. X          + NewGame.info
  1198. X          + NetHackScore.info
  1199. X+         + Guidebook.info
  1200. X          + default.icon
  1201. X!     * Special NetHack font (files hack.font and 8).
  1202. X  
  1203. X      Installation Steps:
  1204. X  
  1205. X      1) If you have a hard disk, create a directory named NetHack.
  1206. X         Assign Nethack: to be the path to this directory.  If you have a
  1207. X!        floppy, format a disk named NetHack.  (If you have a hard disk
  1208. X!        but only one meg of memory, you will probably not have enough
  1209. X!        memory: you may need to run from a floppy.)
  1210. X  
  1211. X      2) If you have a hard disk, assign HackExe: to the above directory.
  1212. X         If you have a floppy, format an additional disk named HackExe.
  1213. X***************
  1214. X*** 57,66 ****
  1215. X  
  1216. X      4) Copy the remainder of the files to NetHack:.  If you are using
  1217. X         the optional font, create a Hack subdirectory on NetHack:, and
  1218. X!        copy "8" into it.
  1219. X  
  1220. X      5) Configure NetHack.cnf as per your configuration.  Remember not
  1221. X!        to set GRAPHICS if you are not using the optional font.
  1222. X  
  1223. X      That's all there is to it!  If you are using the CLI interface, make sure
  1224. X      that the stack is set fairly large (at LEAST 40000 bytes).  Move to the
  1225. X--- 72,86 ----
  1226. X  
  1227. X      4) Copy the remainder of the files to NetHack:.  If you are using
  1228. X         the optional font, create a Hack subdirectory on NetHack:, and
  1229. X!        copy "8" into it.  Be sure that Guidebook and Guidebook.info are
  1230. X!        in the same directory, and that the Default Tool field points to
  1231. X!        the More program (found on your AmigaDos System disk in the
  1232. X!        Utilities directory).  Depending on where you got your copy of
  1233. X!        NetHack, the Guidebook file may be called Guidebook.mss.
  1234. X  
  1235. X      5) Configure NetHack.cnf as per your configuration.  Remember not
  1236. X!        to set GRAPHICS if you are not using the optional font.  If you
  1237. X!        have only one meg of ram, do not use a ram disk.
  1238. X  
  1239. X      That's all there is to it!  If you are using the CLI interface, make sure
  1240. X      that the stack is set fairly large (at LEAST 40000 bytes).  Move to the
  1241. X***************
  1242. X*** 70,81 ****
  1243. X      the WorkBench pull down menu.  This icon now represents your personal
  1244. X      profile.  You can now rename this icon, and tailor it to your liking
  1245. X      as described below.  If you start a game from the WorkBench interface,
  1246. X!     saving the game will automatically tie the personal file icon with the
  1247. X      saved game.  So the next time you select your icon, the game will be
  1248. X      restored.
  1249. X  
  1250. X      As mentioned above, the icon representing your personal profile can be
  1251. X!     customized by you.  This is done via the the Info command available from
  1252. X      WorkBench.  You can adjust the following using the ToolTypes from the
  1253. X      WorkBench info command:
  1254. X  
  1255. X--- 90,101 ----
  1256. X      the WorkBench pull down menu.  This icon now represents your personal
  1257. X      profile.  You can now rename this icon, and tailor it to your liking
  1258. X      as described below.  If you start a game from the WorkBench interface,
  1259. X!     saving the game will automatically tie the personal file icon to the
  1260. X      saved game.  So the next time you select your icon, the game will be
  1261. X      restored.
  1262. X  
  1263. X      As mentioned above, the icon representing your personal profile can be
  1264. X!     customized.  This is done via the the Info command available from
  1265. X      WorkBench.  You can adjust the following using the ToolTypes from the
  1266. X      WorkBench info command:
  1267. X  
  1268. X***************
  1269. X*** 90,101 ****
  1270. X  
  1271. X      * PATH=<path> - To search for files such as rumors, help, etc.
  1272. X  
  1273. X!     * CMDLINE=<args> - Arguments as passed on command line from cli.
  1274. X!       Note:  only the following flags are valid at this point: n, X,
  1275. X!       D, and r.
  1276. X  
  1277. X      * SCORE <options> - Display the record of scores.  Options as
  1278. X!       available on the command line from CLI after a -s flag.
  1279. X  
  1280. X      Note that the NetHack.cnf file is read first, then the ToolTypes.  This
  1281. X      means that the options specified in the NetHack.cnf act as defaults
  1282. X--- 110,120 ----
  1283. X  
  1284. X      * PATH=<path> - To search for files such as rumors, help, etc.
  1285. X  
  1286. X!     * CMDLINE=<args> - Arguments as passed on the CLI command line.
  1287. X!       Note:  only the following flags are valid: n, X, D, and r.
  1288. X  
  1289. X      * SCORE <options> - Display the record of scores.  Options as
  1290. X!       available on the CLI command line after a -s flag.
  1291. X  
  1292. X      Note that the NetHack.cnf file is read first, then the ToolTypes.  This
  1293. X      means that the options specified in the NetHack.cnf act as defaults
  1294. X***************
  1295. X*** 105,118 ****
  1296. X      default values for OPTIONS, which will generally be overridden by
  1297. X      ToolTypes entries.
  1298. X  
  1299. X  Section II - General Compilation Instructions
  1300. X  ---------------------------------------------
  1301. X  
  1302. X      1)  Before doing any compilation, read the README files distributed
  1303. X!     with the source.  These should familiarize you with the
  1304. X!     source tree layout, and what files are shared with what computers.
  1305. X!     Generally, everything in the amiga directory is used exclusively by
  1306. X!     the Amiga.
  1307. X  
  1308. X      2)  Create the sub-directories, and name them as indicated in the source
  1309. X      README file.  If you have a hard drive, this is fairly trivial
  1310. X--- 124,142 ----
  1311. X      default values for OPTIONS, which will generally be overridden by
  1312. X      ToolTypes entries.
  1313. X  
  1314. X+     Also, there is one additional option that may be specified in the
  1315. X+     NetHack.cnf file or on an OPTIONS line: flush.  When enabled, flush
  1316. X+     discards all characters in the queue except the first, which limits
  1317. X+     but does NOT completely eliminate the "accidents" which can occur if
  1318. X+     you get ahead of the game when typing.  The default setting is noflush.
  1319. X+ 
  1320. X  Section II - General Compilation Instructions
  1321. X  ---------------------------------------------
  1322. X  
  1323. X      1)  Before doing any compilation, read the README files distributed
  1324. X!     with the source.  These should familiarize you with the source tree
  1325. X!     layout, and what files are shared with what computers.  Generally,
  1326. X!     everything in the amiga directory is used exclusively by the Amiga.
  1327. X  
  1328. X      2)  Create the sub-directories, and name them as indicated in the source
  1329. X      README file.  If you have a hard drive, this is fairly trivial
  1330. X***************
  1331. X*** 163,169 ****
  1332. X                running from CLI.
  1333. X  
  1334. X      5) If you have significant spare ram, you may wish to make your
  1335. X!        compiler resident (Lattice 5.04's lc, lc1, and lc2 need about
  1336. X         215K while Manx's cc and as need about 135K).
  1337. X  
  1338. X      6) At this point, you're almost ready to begin a compile.  Read VERY
  1339. X--- 187,193 ----
  1340. X                running from CLI.
  1341. X  
  1342. X      5) If you have significant spare ram, you may wish to make your
  1343. X!        compiler resident (Lattice 5.05's lc, lc1, and lc2 need about
  1344. X         215K while Manx's cc and as need about 135K).
  1345. X  
  1346. X      6) At this point, you're almost ready to begin a compile.  Read VERY
  1347. X***************
  1348. X*** 174,180 ****
  1349. X         the Amiga: directory (font and icons), define the UUDEC symbol
  1350. X         at the appropriate place in the makefile.  The first thing
  1351. X         Makefile.ami does is build a program called 'makedefs', which
  1352. X!        handles a variety of data file generation.  Makedefs will then be
  1353. X         run to create a few files, followed by an alphabetically sorted
  1354. X         compilation of the entire source tree.  This compilation process
  1355. X         will compile selected files from Amiga:, Others:, Src1:, Src2:,
  1356. X--- 198,205 ----
  1357. X         the Amiga: directory (font and icons), define the UUDEC symbol
  1358. X         at the appropriate place in the makefile.  The first thing
  1359. X         Makefile.ami does is build a program called 'makedefs', which
  1360. X!        handles a variety of data file generation, and a program called 
  1361. X!        'lev_comp' which compiles the special levels.  Makedefs will then be
  1362. X         run to create a few files, followed by an alphabetically sorted
  1363. X         compilation of the entire source tree.  This compilation process
  1364. X         will compile selected files from Amiga:, Others:, Src1:, Src2:,
  1365. X***************
  1366. X*** 181,188 ****
  1367. X         and Src3: directories.  If all goes well, all of the  objects will
  1368. X         be linked together to form a binary.  With all of the options
  1369. X         enabled, the Manx 3.6 executable runs about 790K, and the Lattice
  1370. X!        executable runs about 790K (without debug hunks, or about 1050K
  1371. X!        with debug hunks - see below).
  1372. X  
  1373. X  SECTION III - Lattice Compilation Instructions
  1374. X  ----------------------------------------------
  1375. X--- 206,215 ----
  1376. X         and Src3: directories.  If all goes well, all of the  objects will
  1377. X         be linked together to form a binary.  With all of the options
  1378. X         enabled, the Manx 3.6 executable runs about 790K, and the Lattice
  1379. X!        executable runs about 750K (without debug hunks, or about 1025K
  1380. X!        with debug hunks - see below).  After building the main binary,
  1381. X!        the makefile will build and install the auxiliary files including
  1382. X!        help files, special levels, icons, and the font files.
  1383. X  
  1384. X  SECTION III - Lattice Compilation Instructions
  1385. X  ----------------------------------------------
  1386. X***************
  1387. X*** 194,205 ****
  1388. X      onto the Ram: disk.  Read through the comments in that script if you
  1389. X      wish to utilize it.
  1390. X  
  1391. X!     Due to a problem with version 5.04, you must make one change:  edit the
  1392. X!     file Others:lev_lex.c.  At (or near) line 1002 is the definition for the
  1393. X!     function yyunput.  Delete the word "register" from this line.  Note that
  1394. X!     if you neglect to do this, you will get an Error 72 at line 318 of file
  1395. X!     lev_comp.l (this is the correct message - lev_lex.c is flex output).  Save
  1396. X!     the changed file.  Later compiler versions may or may not need this fix.
  1397. X  
  1398. X      Type 'CD NetHack:' and then type "lmk -f Amiga:Makefile.ami".  If all
  1399. X      goes well, you'll have a working binary a couple of hours later (depending
  1400. X--- 221,233 ----
  1401. X      onto the Ram: disk.  Read through the comments in that script if you
  1402. X      wish to utilize it.
  1403. X  
  1404. X!     Due to a problem with versions 5.04 and 5.05, you must make one change:
  1405. X!     edit the file Others:lev_lex.c.  At (or near) line 1002 is the definition
  1406. X!     for the function yyunput.  Delete the word "register" from this line.
  1407. X!     Note that if you neglect to do this, you will get an Error 72 at line 318
  1408. X!     of file lev_comp.l (this is the correct message - lev_lex.c is flex output).
  1409. X!     Save the changed file.  Later compiler versions may or may not need this
  1410. X!     fix.
  1411. X  
  1412. X      Type 'CD NetHack:' and then type "lmk -f Amiga:Makefile.ami".  If all
  1413. X      goes well, you'll have a working binary a couple of hours later (depending
  1414. X***************
  1415. X*** 207,221 ****
  1416. X      Lattice users on the team:
  1417. X  
  1418. X      * The primary Lattice compiler used on the Amiga port was version
  1419. X!       5.04.  However, the patch bringing the compiler to 5.04a does
  1420. X!       not appear necessary for compiling NH3.0pl7.
  1421. X  
  1422. X      * The function monsndx, in file mondata.c, has a section of code
  1423. X        which Lattice 5.04 compiles incorrectly.  A hack has been written
  1424. X        around this so that Lattice will generate the correct code.  It is
  1425. X        recommended that you leave this in place, and not attempt to
  1426. X!       "improve" it.  As of this date (1/90) Lattice is preparing 5.05
  1427. X!       which, it is being claimed, fixes this bug.
  1428. X  
  1429. X      * Included in the Lattice port is code for generating a SnapShot.tb
  1430. X        file upon catching various internal disasters.  That is why the
  1431. X--- 235,248 ----
  1432. X      Lattice users on the team:
  1433. X  
  1434. X      * The primary Lattice compiler used on the Amiga port was version
  1435. X!       5.05.  Previous versions of NetHack have been successfully compiled
  1436. X!       with 5.04 and 5.04a.
  1437. X  
  1438. X      * The function monsndx, in file mondata.c, has a section of code
  1439. X        which Lattice 5.04 compiles incorrectly.  A hack has been written
  1440. X        around this so that Lattice will generate the correct code.  It is
  1441. X        recommended that you leave this in place, and not attempt to
  1442. X!       "improve" it.  This fix "does the right thing" in version 5.05.
  1443. X  
  1444. X      * Included in the Lattice port is code for generating a SnapShot.tb
  1445. X        file upon catching various internal disasters.  That is why the
  1446. X***************
  1447. X*** 225,231 ****
  1448. X        fit on a single disk.
  1449. X  
  1450. X      * The optimizer seems to work, but no extensive testing has been
  1451. X!       done with it.
  1452. X  
  1453. X      * There are a large number of warnings under Lattice, which are
  1454. X        harmless.
  1455. X--- 252,258 ----
  1456. X        fit on a single disk.
  1457. X  
  1458. X      * The optimizer seems to work, but no extensive testing has been
  1459. X!       done with it.  (Note: optimizing objnam.c takes several hours.)
  1460. X  
  1461. X      * There are a large number of warnings under Lattice, which are
  1462. X        harmless.
  1463. X***************
  1464. X*** 301,307 ****
  1465. X  
  1466. X      * Unfortunately, Manx 5.0 arrived too late to integrate into patch
  1467. X        level 7, but merging will occur in the next few weeks.  Contact us
  1468. X!       (below) for progress/hints.
  1469. X  
  1470. X              - - - - - - - - - - - -
  1471. X  
  1472. X--- 328,335 ----
  1473. X  
  1474. X      * Unfortunately, Manx 5.0 arrived too late to integrate into patch
  1475. X        level 7, but merging will occur in the next few weeks.  Contact us
  1476. X!       (below) for progress/hints.  (Postscript for PL8: the situation is
  1477. X!       very much improved, but there may be some problems remaining).
  1478. X  
  1479. X              - - - - - - - - - - - -
  1480. X  
  1481. X*** ./Old/Install.unix    Sun Jun  3 11:38:30 1990
  1482. X--- ./Install.unix    Sun Apr 15 11:44:16 1990
  1483. X***************
  1484. X*** 52,58 ****
  1485. X  
  1486. X  1.  A number of systems, such as Xenix, support both the termcap and terminfo
  1487. X      terminal capability libraries.  Make sure that the TERMINFO definition in
  1488. X!     unixconf.h and the TERMLIB definition in the source Makefile correspond.
  1489. X      If spurious characters appear on the screen while kicking, zapping, etc.,
  1490. X      it is likely that you have linked the source to the wrong library or
  1491. X      mistakenly defined/undefined TERMINFO.  If your terminal library does not
  1492. X--- 52,58 ----
  1493. X  
  1494. X  1.  A number of systems, such as Xenix, support both the termcap and terminfo
  1495. X      terminal capability libraries.  Make sure that the TERMINFO definition in
  1496. X!     config.h and the TERMLIB definition in the source Makefile correspond.
  1497. X      If spurious characters appear on the screen while kicking, zapping, etc.,
  1498. X      it is likely that you have linked the source to the wrong library or
  1499. X      mistakenly defined/undefined TERMINFO.  If your terminal library does not
  1500. X***************
  1501. X*** 100,102 ****
  1502. X--- 100,109 ----
  1503. X      -DDUMB to CFLAGS and DUMB.Setup to the Sys.3B2 dependency line.  The
  1504. X      compiler provided with later versions of the OS has a large enough
  1505. X      symbol table that it does not need this workaround.
  1506. X+ 
  1507. X+ 8.  If NetHack seems to compile fine, starts up, allows you to pick a
  1508. X+     character, and then either hangs or gets a segmentation fault, you
  1509. X+     should try changing the schar and uchar definitions in config.h to
  1510. X+     short ints.  This problem is known to occur on the AT&T 3B series,
  1511. X+     Silicon Graphics Irises, and IBM PC/RT's running AIX, and may occur
  1512. X+     on other computers as well.
  1513. X*** ./Old/Makefile.top    Sun Jun  3 11:39:03 1990
  1514. X--- ./Makefile.top    Thu Mar  1 20:30:22 1990
  1515. X***************
  1516. X*** 65,71 ****
  1517. X  # copy over new versions of the game files
  1518. X      ( cd auxil ; cp $(AUX) $(GAMEDIR) )
  1519. X  #    (don't yank the old version out from under people who're playing it)
  1520. X!     mv $(GAMEDIR)/$(GAME) $(GAMEDIR)/$(GAME).old
  1521. X      cp src/$(GAME) $(GAMEDIR)
  1522. X      -rm -f $(SHELLDIR)/$(GAME)
  1523. X      sed -e 's;/usr/games/lib/nethackdir;$(GAMEDIR);' \
  1524. X--- 65,71 ----
  1525. X  # copy over new versions of the game files
  1526. X      ( cd auxil ; cp $(AUX) $(GAMEDIR) )
  1527. X  #    (don't yank the old version out from under people who're playing it)
  1528. X!     -mv $(GAMEDIR)/$(GAME) $(GAMEDIR)/$(GAME).old
  1529. X      cp src/$(GAME) $(GAMEDIR)
  1530. X      -rm -f $(SHELLDIR)/$(GAME)
  1531. X      sed -e 's;/usr/games/lib/nethackdir;$(GAMEDIR);' \
  1532. X***************
  1533. X*** 80,89 ****
  1534. X      chgrp $(GAMEGRP) $(SHELLDIR)/$(GAME)
  1535. X      chmod 0755 $(SHELLDIR)/$(GAME)
  1536. X      chmod 04755 $(GAMEDIR)/$(GAME)
  1537. X! # and touch time-sensitive files
  1538. X      -touch -c $(GAMEDIR)/bones* $(GAMEDIR)/?lock* $(GAMEDIR)/wizard*
  1539. X      -touch -c $(GAMEDIR)/save/*
  1540. X      touch $(GAMEDIR)/perm $(GAMEDIR)/record
  1541. X  
  1542. X  install: $(GAME) data rumors spec_levs
  1543. X  # set up the directories
  1544. X--- 80,92 ----
  1545. X      chgrp $(GAMEGRP) $(SHELLDIR)/$(GAME)
  1546. X      chmod 0755 $(SHELLDIR)/$(GAME)
  1547. X      chmod 04755 $(GAMEDIR)/$(GAME)
  1548. X! # touch time-sensitive files
  1549. X      -touch -c $(GAMEDIR)/bones* $(GAMEDIR)/?lock* $(GAMEDIR)/wizard*
  1550. X      -touch -c $(GAMEDIR)/save/*
  1551. X      touch $(GAMEDIR)/perm $(GAMEDIR)/record
  1552. X+ # and copy the man pages
  1553. X+     -$(GAMEMANCREATE) $(MANDIR)/$(GAME).$(MANEXT)
  1554. X+     -$(LEVMANCREATE) $(MANDIR)/lev_comp.$(MANEXT)
  1555. X  
  1556. X  install: $(GAME) data rumors spec_levs
  1557. X  # set up the directories
  1558. X*** ./Old/README    Sun Jun  3 11:39:26 1990
  1559. X--- ./README    Sun Apr 15 11:57:40 1990
  1560. X***************
  1561. X*** 77,105 ****
  1562. X  
  1563. X      At the time of this release, NetHack 3.0 is known to run on:
  1564. X  
  1565. X-         DEC vaxen running Ultrix and BSD
  1566. X-         Sun-3s running SunOS 4.0
  1567. X-         Encore Multimax running UMAX 4.2
  1568. X-         Bull XPS100 running System V R2.2 or R3.1
  1569. X-         Bull DPX/2 200 running System V R3.1
  1570. X-         AT&T 3B4000 running System V
  1571. X          AT&T 3B1 running System V (3.51)
  1572. X          AT&T 3B2/600 & 3B2/622 running System V R3.2.1
  1573. X          AT&T 3B2/1000 Model 80 running System V R3.2.2
  1574. X!         286 box running Microport SysV/AT (not extensively tested)
  1575. X!         IBM PC compatibles running MicroSoft C or Turbo C under MS-DOS
  1576. X!         IBM PS/2 and AT compatibles running MicroSoft C under OS/2
  1577. X!         Commodore Amiga running Lattice or Manx/Aztec C under
  1578. X!         AmigaDOS 1.3 (WorkBench 1.3, KickStart 1.2 or 1.3)
  1579. X!         Atari 1040ST under TOS
  1580. X!         DEC vaxen running VMS
  1581. X!         Data General AViiON systems under DG/UX
  1582. X!         Valid Logic Systems SCALD-System
  1583. X!         Macintosh (still requires testing)
  1584. X!         Mips M2000 running RiscOS 4.1
  1585. X          Gould NP1 running UTX 3/2
  1586. X!         Stride 460 running UniStride 2.1
  1587. X          Pyramid 9820x running OSx 4.4c
  1588. X  
  1589. X              - - - - - - - - - - -
  1590. X  
  1591. X--- 77,110 ----
  1592. X  
  1593. X      At the time of this release, NetHack 3.0 is known to run on:
  1594. X  
  1595. X          AT&T 3B1 running System V (3.51)
  1596. X          AT&T 3B2/600 & 3B2/622 running System V R3.2.1
  1597. X          AT&T 3B2/1000 Model 80 running System V R3.2.2
  1598. X!         AT&T 3B4000 running System V
  1599. X!         Bull DPX/2 200 running System V R3.1
  1600. X!         Bull XPS100 running System V R2.2 or R3.1
  1601. X!         Data General AViiON systems running DG/UX
  1602. X!         DEC vaxen running Ultrix and BSD
  1603. X!         Decstation 5400 running Ultrix 3.1
  1604. X!         Encore Multimax running UMAX 4.2
  1605. X          Gould NP1 running UTX 3/2
  1606. X!         H-P 9000s300 running HP-UX
  1607. X!         IBM PC/RT running AIX
  1608. X!         Mips M2000 running RiscOS 4.1
  1609. X          Pyramid 9820x running OSx 4.4c
  1610. X+         SGI Iris running IRIX
  1611. X+         Stride 460 running UniStride 2.1
  1612. X+         Sun-3s and -4s running SunOS 3.x and 4.0.x
  1613. X+         Valid Logic Systems SCALD-System
  1614. X+         286 box running Microport SysV/AT (not extensively tested)
  1615. X+ 
  1616. X+         Apple Macintosh running MacOS
  1617. X+         Atari 1040ST running TOS
  1618. X+         Commodore Amiga running AmigaDOS 1.3 (WorkBench 1.3,
  1619. X+                 KickStart 1.2 or 1.3) with Lattice or Manx/Aztec C
  1620. X+         DEC vaxen running VMS
  1621. X+         IBM PC compatibles running MS-DOS with MicroSoft C or Turbo C
  1622. X+         IBM PS/2 and AT compatibles running OS/2 with MicroSoft C
  1623. X  
  1624. X              - - - - - - - - - - -
  1625. X  
  1626. X***************
  1627. X*** 107,112 ****
  1628. X--- 112,119 ----
  1629. X  development team may be reached as
  1630. X   
  1631. X              nethack-bugs@linc.cis.upenn.edu.  
  1632. X+ 
  1633. X+ Please be sure to include your machine type, OS, and patchlevel.
  1634. X  
  1635. X  Patches especially should be directed to this address.  If you've changed 
  1636. X  something to get NetHack to run on your system, it's likely that others have
  1637. X
  1638. END_OF_FILE
  1639. if test 50401 -ne `wc -c <'patch8.11'`; then
  1640.     echo shar: \"'patch8.11'\" unpacked with wrong size!
  1641. fi
  1642. # end of 'patch8.11'
  1643. fi
  1644. echo shar: End of archive 11 \(of 24\).
  1645. cp /dev/null ark11isdone
  1646. MISSING=""
  1647. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ; do
  1648.     if test ! -f ark${I}isdone ; then
  1649.     MISSING="${MISSING} ${I}"
  1650.     fi
  1651. done
  1652. if test "${MISSING}" = "" ; then
  1653.     echo You have unpacked all 24 archives.
  1654.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1655. else
  1656.     echo You still need to unpack the following archives:
  1657.     echo "        " ${MISSING}
  1658. fi
  1659. ##  End of shell archive.
  1660. exit 0
  1661.